/**
 * 七牛云配置
 * 请根据您的七牛云账户信息修改以下配置
 */

export interface QiniuConfig {
  // 基础配置
  accessKey: string;
  secretKey: string;
  bucket: string;
  domain: string;
  uploadUrl: string;
  tokenUrl: string; // 获取上传token的服务器地址

  // 高级配置
  region: string;
  useHttps: boolean;
  timeout: number;
  retryCount: number;

  // 文件配置
  maxFileSize: number; // 最大文件大小（字节）
  allowedFileTypes: string[]; // 允许的文件类型

  // 上传策略配置
  uploadPolicy: {
    expires: number; // token过期时间（秒）
    persistentOps?: string; // 持久化操作
    persistentNotifyUrl?: string; // 持久化回调URL
    persistentPipeline?: string; // 持久化处理队列
  };
}

/**
 * 七牛云配置常量
 * 请根据您的实际情况修改以下配置
 */
export const QINIU_CONFIG: QiniuConfig = {
  // ==================== 基础配置 ====================

  // AccessKey和SecretKey（从七牛云控制台获取）
  accessKey: '8inVWxc1a2MdWlGB9mi36QhuUm5HLwHmPnPDt3Fh',
  secretKey: '3AD_4-MbABIiOu0ArJ7K4uEGdFTvuONB9bGCs7Fe',

  // 存储空间名称
  bucket: 'zhentaojiaoyu123',

  // 域名配置（可以是自定义域名或七牛云提供的域名）
  domain: 'http://t04yqn7bm.hb-bkt.clouddn.com',

  // 上传域名（根据您的存储区域选择）
  uploadUrl: 'https://upload-z2.qiniup.com', // 华南区域

  // 获取上传token的服务器地址
  tokenUrl: 'http://192.168.0.122:3006/api/v1/admin/qiniu/uploadToken',

  // ==================== 高级配置 ====================

  // 存储区域
  region: 'z2', // 华南区域，可选值：z0(华东), z1(华北), z2(华南), na0(北美), as0(东南亚)

  // 是否使用HTTPS
  useHttps: false,

  // 超时时间（毫秒）
  timeout: 30000,

  // 重试次数
  retryCount: 3,

  // ==================== 文件配置 ====================

  // 最大文件大小（100MB）
  maxFileSize: 100 * 1024 * 1024,

  // 允许的文件类型
  allowedFileTypes: [
    // 图片格式
    'jpg',
    'jpeg',
    'png',
    'gif',
    'bmp',
    'webp',
    'tiff',
    'svg',
    // 视频格式
    'mp4',
    'avi',
    'mov',
    'wmv',
    'flv',
    'mkv',
    'webm',
    'm4v',
    '3gp',
    // 音频格式
    'mp3',
    'wav',
    'aac',
    'ogg',
    'flac',
    // 文档格式
    'pdf',
    'doc',
    'docx',
    'xls',
    'xlsx',
    'ppt',
    'pptx',
    'txt',
  ],

  // ==================== 上传策略配置 ====================

  uploadPolicy: {
    // token过期时间（1小时）
    expires: 3600,

    // 持久化操作（可选，用于视频转码等）
    // persistentOps: 'avthumb/mp4/vb/1.25m/s/1280x720',

    // 持久化回调URL（可选）
    // persistentNotifyUrl: 'https://your-callback-url.com/notify',

    // 持久化处理队列（可选）
    // persistentPipeline: 'your-pipeline-name'
  },
};

/**
 * 根据区域获取上传域名
 */
export function getUploadUrlByRegion(region: string): string {
  const uploadUrls: Record<string, string> = {
    z0: 'https://upload.qiniup.com', // 华东
    z1: 'https://upload-z1.qiniup.com', // 华北
    z2: 'https://upload-z2.qiniup.com', // 华南
    na0: 'https://upload-na0.qiniup.com', // 北美
    as0: 'https://upload-as0.qiniup.com', // 东南亚
  };

  return uploadUrls[region] || uploadUrls['z2'];
}

/**
 * 验证配置是否完整
 */
export function validateConfig(): { isValid: boolean; errors: string[] } {
  const errors: string[] = [];

  // 检查必填字段
  if (
    !QINIU_CONFIG.accessKey ||
    QINIU_CONFIG.accessKey === 'your_access_key_here'
  ) {
    errors.push('AccessKey未配置');
  }

  if (
    !QINIU_CONFIG.secretKey ||
    QINIU_CONFIG.secretKey === 'your_secret_key_here'
  ) {
    errors.push('SecretKey未配置');
  }

  if (!QINIU_CONFIG.bucket || QINIU_CONFIG.bucket === 'your_bucket_name') {
    errors.push('Bucket未配置');
  }

  if (
    !QINIU_CONFIG.domain ||
    QINIU_CONFIG.domain === 'https://your-domain.com'
  ) {
    errors.push('Domain未配置');
  }

  if (
    !QINIU_CONFIG.tokenUrl ||
    QINIU_CONFIG.tokenUrl === 'http://your-server.com/api/token'
  ) {
    errors.push('TokenUrl未配置');
  }

  return {
    isValid: errors.length === 0,
    errors,
  };
}

/**
 * 获取配置信息（用于调试，隐藏敏感信息）
 */
export function getConfigInfo(): void {
  console.log('🔧 === 七牛云配置信息 ===');
  console.log('🔑 AccessKey:', QINIU_CONFIG.accessKey.substring(0, 8) + '...');
  console.log('🔐 SecretKey:', QINIU_CONFIG.secretKey.substring(0, 8) + '...');
  console.log('📦 Bucket:', QINIU_CONFIG.bucket, '(默认值)');
  console.log('🌐 Domain:', QINIU_CONFIG.domain);
  console.log('📤 UploadUrl:', QINIU_CONFIG.uploadUrl);
  console.log('🔑 TokenUrl:', QINIU_CONFIG.tokenUrl);
  console.log('📍 Region:', QINIU_CONFIG.region);
  console.log('📏 MaxFileSize:', QINIU_CONFIG.maxFileSize, 'bytes');
  console.log(
    '📄 AllowedFileTypes:',
    QINIU_CONFIG.allowedFileTypes.length,
    '种'
  );
  console.log('⏱️ Timeout:', QINIU_CONFIG.timeout, 'ms');
  console.log('🔄 RetryCount:', QINIU_CONFIG.retryCount);
  console.log('🔒 UseHTTPS:', QINIU_CONFIG.useHttps);
  console.log('⏰ TokenExpires:', QINIU_CONFIG.uploadPolicy.expires, 'seconds');
  console.log('✅ ================================');
}

/**
 * 详细配置诊断
 */
export function diagnoseConfiguration(): void {
  console.log('🔍 === 七牛云配置诊断 ===');

  // 检查配置完整性
  const validation = validateConfig();
  if (validation.isValid) {
    console.log('✅ 配置验证通过');
  } else {
    console.log('❌ 配置验证失败:');
    validation.errors.forEach(error => console.log('  -', error));
  }

  // 检查AccessKey和SecretKey
  if (QINIU_CONFIG.accessKey === QINIU_CONFIG.secretKey) {
    console.log('⚠️ 警告: AccessKey和SecretKey相同，可能配置错误');
  }

  // 检查域名格式
  if (!QINIU_CONFIG.domain.startsWith('http')) {
    console.log('⚠️ 警告: Domain应该以http或https开头');
  }

  // 检查上传URL格式
  if (!QINIU_CONFIG.uploadUrl.includes('upload')) {
    console.log('⚠️ 警告: UploadUrl格式可能不正确');
  }

  console.log('📊 === 诊断完成 ===');
}

/**
 * 检查文件类型是否允许
 */
export function isFileTypeAllowed(fileName: string): boolean {
  const extension = fileName.split('.').pop()?.toLowerCase();
  if (!extension) return false;

  return QINIU_CONFIG.allowedFileTypes.includes(extension);
}

/**
 * 检查文件大小是否在限制范围内
 */
export function isFileSizeValid(fileSize: number): boolean {
  return fileSize <= QINIU_CONFIG.maxFileSize;
}

/**
 * 获取文件大小限制的友好显示
 */
export function getMaxFileSizeDisplay(): string {
  const sizeInMB = QINIU_CONFIG.maxFileSize / (1024 * 1024);
  return `${sizeInMB}MB`;
}
